import { reqLogin, reqGetUserInfo } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
export default {
  namespaced: true,
  state: {
    token: getToken() || '', // 一进来优先从缓存中取token字符串
    userInfo: {}
  },
  mutations: {
    SETTOKEN(state, newToken) {
      state.token = newToken
      setToken(newToken) // 设置了 token 的同时, 同步到本地cookies中) // 设置了 token 的同时, 同步到本地cookies中
    },
    SETUSERINFO(state, newUserInfo) {
      state.userInfo = newUserInfo
    },
    REMOVE_TOKEN(state) {
      state.token = null
      removeToken()
    },
    REMOVE_USER_INFO(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // async getToken(ctx, loginForm) {
    //   const res = await reqLogin(loginForm)
    //   const token = res.data.data
    //   console.log('vuexLogin', res)
    //   // console.log('token', res.data.data)
    //   ctx.commit('SETTOKEN', token)
    // }

    // 发送登录请求, 异步操作
    getToken(ctx, data) {
      return new Promise((resolve, reject) => {
        reqLogin(data).then(res => {
          const token = res.data
          ctx.commit('SETTOKEN', token)
          resolve(res)
        }).catch(error => {
          reject(error)
        })
      })
    },
    // 获取用户信息
    async getUserInfo(ctx) {
      const { data } = await reqGetUserInfo()
      // console.log('用户信息', data) // data 就是用户基本的资料
      ctx.commit('SETUSERINFO', data)
      return data // return用户信息出去方便权限控制那边调用
    },
    // 退出
    logout(ctx) {
      ctx.commit('REMOVE_TOKEN')
      ctx.commit('REMOVE_USER_INFO')
    }
  }

}
